/**
 * 匹配是否为行内图片引用 `![]()`
 */
export const isInlineImageReferenceRegExp = /^!\[.*\]\([^\s]+\)/;

/**
 * 匹配行内图片引用的图片引用的图片路径 `![]($1)`
 */
export const matchInlineImageReferencePathRegExp = /\!\[.*\]\(([^\s]+)\)/;

/**
 * 匹配标签图片引用的图片引用的图片路径 `<img src="$1" />`
 */
export const matchTagImageReferencePathRegExp = /\<img[^>]*src="([^\s]+)"[^>]*\/?\>/;

/**
 * 匹配行内图片引用的 `![](`: `$1` 和 `)`: `$2` 的两部分
 */
export const matchInlineImageReference2PartsRegExp = /(!\[.*\]\()[^\s]+(\))/;

/**
 * 匹配行内图片引用的 `![](`: `$1` `$2` `)`: `$3` 的3部分
 */
export const matchInlineImageReference3PartsRegExp = /(!\[.*\]\()([^\s]+)(\))/;

/**
 * 匹配标签图片引用 `<img src=\"`: `$1` 和 `" />`: `$2` 的两部分
 */
export const matchTagImageReference2PartsRegExp = /(\<img[^>]*src=")[^\s]+("[^>]*\/?\>)/;

/**
 * 匹配标签图片引用 `<img src=\"`: `$1` `$2` `" />`: `$3` 的3部分
 */
export const matchTagImageReference3PartsRegExp = /(\<img[^>]*src=")([^\s]+)("[^>]*\/?\>)/;

/**
 * 匹配是否为 url (http / https / ftp / file)
 */
export const isUrlRegExp = /^(https?|ftp|file):\/\/[-A-Za-z0-9+&@#\/%?=~_|!:,.;]+[-A-Za-z0-9+&@#\/%=~_|]$/;

/**
 * 匹配是否为相对路径
 */
export const isRelativePathRegExp = /^(\.\.\/|\.\/)*([^\\:"<>|(\.\/)(\.\.\/)]+\/|[^\\:"<>|(\.\.\/)]+)*/;

/**
 * 获取匹配 Markdown 文档中所有的图片引用
 */
export const matchMarkdownAllImageReferencesRegex = /(!\[.*\]\([^\s\)]+\)|<img.*src=["'][^\s]+["'][^>]*\/?>)/g;

/**
 * 获取匹配 Markdown 文档中指定的图片引用的正则对象
 */
export function getMarkdownImageReferenceRegExp(imagePath: string, flags: string = 'g', strict = false) {
	const vague1 = strict ? '' : `[^\\)]*`;
	const vague2 = strict ? '' : `[^"']*`;

	const str = `(!\\[.*\\]\\(${vague1}${imagePath}${vague1}\\)|<img.*src=["']${vague2}${imagePath}${vague2}["'][^>]*/\?>)`;

	return new RegExp(str, flags);
}

/**
 * 获取匹配 base64 data url，`data:image/$1;base64,$2`
 */
export const matchbase64DateURLRegex =
	/^data:image\/([a-zA-Z0-9]+);base64,((?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)$/;

/**
 * 匹配文件名或文件路径的扩展名 `file.$1`
 */
export const matchExtRegex = /.*\.([a-zA-Z]+)$/;
